package com.nbst.dao.mapper.mes;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.nbst.dao.base.mapper.BaseMapper;
import com.nbst.model.mes.BomIcmo;
import com.nbst.model.mes.IcmoEntry;

/**
 *
 * @ClassName: IcmoEntryMapper
 * @Description:APS中的生产任务单，作为排程依据
 * @author King
 * @date 2018年10月16日
 *
 */
public interface IcmoEntryMapper extends BaseMapper<IcmoEntry> {
	/**
	 * 查询IcmoEntry表中ERP任务单最大的ID
	 *
	 * @return int
	 * @author King
	 * @date 2018年10月17日
	 */
	Integer getMaxIcmoId();

	int insertBatch(List<IcmoEntry> entrys);

	/**
	 * 根据物料内码或物料代码查询该物料有多少在制数
	 *
	 * @param map
	 * @return Integer
	 * @author King
	 * @date 2018年11月13日
	 */
	Double getItemPpQty(Map<String, Object> map);

	/**
	 * 根据物料内码查询出未完成的生产任务单
	 *
	 * @param map
	 * @return List<IcmoEntry>
	 * @author King
	 * @date 2018年12月6日
	 */
	List<IcmoEntry> getNotClosedIcmo(Map<String, Object> map);

	/**
	 * 根据任务单内码查询该任务单预计生产时间
	 *
	 * @param fIcmoId
	 * @return Date
	 * @author King
	 * @date 2019年1月26日
	 */
	Date getIcmoDate(Integer fIcmoId);

	String getIcmofNumber(Integer fIcmoId);

	int insertIcmo(Map<String, Object> m);

	/**
	 * 根据物料申请单内码修改任务单投产数
	 *
	 * @param map
	 * @return int
	 * @author King
	 * @date 2019年3月4日
	 */
	int updatePPQty(Integer id);

	/***
	 * 根据装配任务单查询该装配的销售订单号
	 *
	 * @param fIcmoId
	 * @return String
	 * @author King
	 * @date 2019年4月3日
	 */
	String getOrderBillNo(Integer fIcmoId);

	/**
	 * 查询状态不为3且未关闭的生产任务单数量与入库数量
	 *
	 * @return List<Map<String,Object>>
	 * @author King
	 * @date 2019年4月17日
	 */
	List<Map<String, Object>> getIcmoInStockQty();

	/**
	 * 根据生产任务单id,修改生产入库数量
	 *
	 * @param map
	 * @return Integer
	 * @author King
	 * @date 2019年4月17日
	 */
	// Integer updateIcmoInStockQty(Map<String,Object> map);

	/**
	 * 根据生产任务单id修改生产任务状态
	 *
	 * @param map
	 * @return Integer
	 * @author King
	 * @date 2019年4月20日
	 */
	Integer updateIcmoStatus(Map<String, Object> map);

	/**
	 * 根据任务单号查询该任务单号是否已被用掉了
	 *
	 * @param map
	 * @return Integer
	 * @author King
	 * @date 2019年4月24日
	 */
	Integer countfBillNo(Map<String, Object> map);

	/**
	 * 校正任务单的异常数据
	 *
	 * void
	 *
	 * @author King
	 * @date 2019年5月22日
	 */
	void correctingIcmoDatas();

	/**
	 * 根据物料申请单id查询任务单号与派工单号
	 *
	 * @param id
	 * @return Map
	 * @author King
	 * @date 2019年7月10日
	 */
	List<Map<String, Object>> findByApplyIdDis(Integer id);

	/**
	 * 根据物料申请单id查询任务单号与委外单号
	 *
	 * @param id
	 * @return Map
	 * @author King
	 * @date 2019年7月10日
	 */
	List<Map<String, Object>> findByApplyIdSub(Integer id);

	/**
	 * 根据fBillNo查询
	 *
	 * @param map
	 * @return List<IcmoEntry>
	 * @author Fuyr
	 * @date 2019年8月02日
	 */
	List<IcmoEntry> findByfBillNo(Map<String, Object> map);

	/**
	 * 根据内码、单号、状态 查询任务单
	 *
	 * @param map
	 * @return List<IcmoEntry>
	 * @author King
	 * @date 2019年8月6日
	 */
	List<IcmoEntry> findByCondition1(Map<String, Object> map);

	int deleteSeorderno();

	/**
	 * 新增内码到临时表中
	 *
	 * @param list
	 * @return int
	 * @author King
	 * @date 2019年8月29日
	 */
	int insertOrderBillNo(List<Map<String, Object>> list);

	/**
	 * 更新任务单中的订单号
	 *
	 * @return int
	 * @author King
	 * @date 2019年8月29日
	 */
	int updateIcmoOrderBillNo();

	Double getIcomStockQty(Integer fIcmoId);

	/**
	 * 根据订单分录主键查询需生产的任务单的生产情况
	 *
	 * @param fDetailID
	 * @return List<BomIcmo>
	 * @author King
	 * @date 2019年12月26日
	 */
	List<BomIcmo> orderNeedIcmoList(Integer fDetailID);

	/**
	 * 销售订单列表汇总
	 *
	 * @param map
	 * @return List<Map<String,Object>>
	 * @author King
	 * @date 2020年1月11日
	 */
	List<Map<String, Object>> orderSummary(Map<String, Object> map);

	/**
	 * 销售订单数量汇总
	 *
	 * @param map
	 * @return Double
	 * @author King
	 * @date 2020年1月11日
	 */
	Double orderSummarySum(Map<String, Object> map);

	/**
	 * 根据订单内码修改备注与摘要
	 *
	 * @param record
	 * @return int
	 * @author King
	 * @date 2019年7月2日
	 */
	int updateIcmoNote(IcmoEntry icmo);

	/**
	 * 根据任务单id查询派工单数量
	 *
	 * @param fIcmoId
	 * @return int
	 * @author King
	 * @date 2020年2月12日
	 */
	int getDispatchNum(Integer fIcmoId);

	/**
	 * 根据完工单id获取任务单id
	 *
	 * @param id
	 *            完工单id
	 * @return Integer
	 * @author King
	 * @date 2020年3月21日
	 */
	Integer getIcmoId(Integer id);

	/**
	 * 根据合并发料单获取不等于液压马达的派工单数量
	 *
	 * @param id
	 *            合并领料单id
	 * @return Integer
	 * @author King
	 * @date 2020年5月22日
	 */
	Integer getNotEqualNum(Integer id);

	int havaIcmoInfo(Map map);

	int havaDisInfo(Map map);

	List<Map> getIcmoInfo(Map map);

	List<Map> getDisInfo(Map map);

	/**
	 * 关闭3个月前就已经完成的任务单
	 * 
	 * void
	 * 
	 * @author King
	 * @date 2021年2月9日
	 */
	void closedFinishIcmo();
}